/**
 * 根组件
 */
// 导入相关的包
import Vue from 'vue'
import VueRouter from 'vue-router'
import VueResource from 'vue-resource'
import VuePreview from 'vue-preview'
import Vuex from 'vuex'
import router from './router.js'
import App from './App.vue'
// import {
//     Header,
//     Swipe,
//     SwipeItem,
//     Button
// } from 'mint-ui'
// MintUI 组件
import MintUI from 'mint-ui'
import 'mint-ui/lib/style.css'

// mui组件
import './lib/mui/css/mui.min.css'
import './lib/mui/css/icons-extra.css'
import './css/App.less'
import moment from 'moment'



// 注册全局组件
// Vue.component(Header.name, Header);
// Vue.component(Swipe.name, Swipe);
// Vue.component(SwipeItem.name, SwipeItem);
// Vue.component(Button.name, Button)

Vue.filter('dateFormat', (el, pattern = 'YYYY-MM-DD HH:mm:ss') => {
    return moment(el).format(pattern)
})

// 手动安装路由
Vue.use(VueRouter);
Vue.use(VueResource)
Vue.use(MintUI)
Vue.use(VuePreview)
Vue.use(Vuex);

// 配置 请求数据的根地址
Vue.http.options.root = 'http://www.liulongbin.top:3005';
// 处理提交的数据格式
Vue.http.options.emulateJSON = true;


// 从 localStorage 里面获取购物车列表
let carList = JSON.parse(localStorage.getItem('cart') || '[]');

const store = new Vuex.Store({
    state: {
        cart: carList
    },
    mutations: {
        // 加入购物车
        addCart(state, goodsInfo) {

            // 首先遍历一下购物车判断这条记录是否存在，如果存在只让他的数量进行增加，否则直接push到购物车里面
            let f = state.cart.some(item => {
                if (goodsInfo.id === item.id) {
                    item.count += goodsInfo.count;
                    return true
                }
            })
            // 如果f 的返回值为true，说明购物车里面有，并且已经进行数量的修改了，如果为false那么就直接push到购物车列表里面
            if (!f) {
                state.cart.push(goodsInfo);
            }
            // 将购物车列表存入到localStorage中
            localStorage.setItem('cart', JSON.stringify(state.cart));

        },
        // 更新购物车
        updateCart(state, obj) {
            state.cart.some(item => {
                if (item.id == obj.id) {
                    item.count = obj.count

                    return true;
                }
            })
            // 将购物车列表存入到localStorage中
            localStorage.setItem('cart', JSON.stringify(state.cart));
        },
        // 修改商品的状态值
        changeStatus(state, id) {
            console.log('id = ' + id);
            state.cart.some(item => {
                if (item.id == id) {
                    item.status = !item.status;
                    console.log(item.status);
                    return true;
                }
            })

            // 将购物车列表存入到localStorage中
            localStorage.setItem('cart', JSON.stringify(state.cart));
        },
        deleCart(state, id) {
            let index = state.cart.findIndex(item => {
                if (item.id == id) {
                    return true;
                }
            })
            console.log('index = ' + index);
            state.cart.splice(index, 1);

            // 将购物车列表存入到localStorage中
            localStorage.setItem('cart', JSON.stringify(state.cart));
        }
    },
    getters: {
        // 获取购物车商品的总数
        getCartCount(state) {
            let total = 0;
            state.cart.forEach(element => {
                total += element.count;
            });

            return total;
        },
        // 返回每个商品选择的个数
        getGoodsCount(state) {
            let o = [];

            state.cart.forEach(item => {
                o[item.id] = item.count;
            })
            return o;
        },
        // 返回每个商品的状态
        getGoodsStatus(state) {
            let o = [];

            state.cart.forEach(item => {
                o[item.id] = item.status;
            })

            return o;
        },
        // 小计信息的数据
        getGoodsAmount(state) {
            let amount = 0;
            let total = 0;
            state.cart.forEach(item => {
                if (item.status) {
                    amount++;
                    total += item.count * item.prices;
                }
            })

            return {
                amount,
                total
            };
        }
    }
});


// Vue.http.options
const vm = new Vue({
    el: '.app',
    data: {},
    router,
    render: c => c(App),
    store,
})